// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  // env:"cloud1-2guh9tam1ee71336" //手动选择环境变量
  env: cloud.DYNAMIC_CURRENT_ENV //默认当前选择的环境
})

// 云函数入口函数

//查询所有招募
const db = cloud.database()
const _ = db.command
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const parameter = event.parameter
  if(parameter=='getRecruitAll'){  //查询所有招募
    return db.collection('recruit').get()
  }else if(parameter=='updateRecruitNumberById') { //根据id修改招募数量
    return db.collection('recruit').where({
      _id: event.id
    })
    .update({
      data: {
        recruitNumber: event.recruitNumber
      },
    })
  }else if(parameter=='updateApplicationNumById') { //根据id修改已申请的数量
    return db.collection('recruit').where({
      _id: event.id
    })
    .update({
      data: {
        applicationNum:_.inc(1)
      },
    })
  } else if(parameter=='getRecruitByUserId'){ //根据userId查询招募
    const MAX_LIMIT = 3  //一次查询3条数据
    const countResult = await db.collection('recruit').where({
      userId:wxContext.OPENID
    }).count()  //计算有多少条数据
    const total = countResult.total    //得到表数据总数
    // 计算需要分几次 读取数据
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    var tasks = [] //用来存放每次查询的结果
    for (let i = 0; i < batchTimes; i++) {
      await db.collection('recruit')
      .orderBy('createTime','desc')
      .skip(i * MAX_LIMIT)  //跳过已经查询过的数据
      .limit(MAX_LIMIT)  //每次查询多少数据
      .where({
        userId:wxContext.OPENID
      })
      .get()
      .then(res=>{
        // console.log('第'+(i+1)+'页',res)
        tasks = tasks.concat(res.data)
      })
    }
    // console.log(tasks)
    return tasks
  }else if(parameter=='getRecruitAndApplicantListAll'){ //聚合查询所有的招募，并将对于的申请表添加进去  (连表查询,recruit 、applicant )
    return db.collection('recruit').aggregate()
    .lookup({
      from:'applicant',
      localField: '_id',
			foreignField: 'recruitId',
			as: 'applicantList',
    })
    .end()
  }else if(parameter=='pagingGetRecruitAll'){  // 分页查询所有招募  (一次性获取全部)
    const MAX_LIMIT = 3  //一次查询3条数据
    const countResult = await db.collection('recruit').count()  //计算有多少条数据
    const total = countResult.total    //得到表数据总数
    // 计算需要分几次 读取数据
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    var tasks = [] //用来存放每次查询的结果
    for (let i = 0; i < batchTimes; i++) {
      await db.collection('recruit')
      .orderBy('createTime','desc')
      .skip(i * MAX_LIMIT)  //跳过已经查询过的数据
      .limit(MAX_LIMIT)  //每次查询多少数据
      .get()
      .then(res=>{
        // console.log('第'+(i+1)+'页',res)
        tasks = tasks.concat(res.data)
      })
    }
    // console.log(tasks)
    return tasks
  }else if(parameter=='pagingGetRecruits'){  // 分页查询所有招募 （一次性获取event.MAX_LIMIT条）
    const MAX_LIMIT = event.MAX_LIMIT  //一次查询3条数据
    const i = event.i  //第几页
    return   db.collection('recruit')
    .orderBy('createTime','desc')
    .skip(i * MAX_LIMIT)  //跳过已经查询过的数据
    .limit(MAX_LIMIT)  //每次查询多少数据
    .get()
  }else if(parameter=='getRecruitCount'){  // 统计有多少招募
    return await db.collection('recruit').count()
  }else if(parameter=='removeRecruitById'){  //根据id 删除招募 
    return await db.collection('recruit')
    .where({
      _id:event.id
    }).remove()
  } else if(parameter=='getRecruitByRecruitState'){ //根据recruitState查询招募
    const MAX_LIMIT = 3  //一次查询3条数据
    const countResult = await db.collection('recruit').where({
      recruitState:event.recruitState
    }).count()  //计算有多少条数据
    const total = countResult.total    //得到表数据总数
    // 计算需要分几次 读取数据
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    var tasks = [] //用来存放每次查询的结果
    for (let i = 0; i < batchTimes; i++) {
      await db.collection('recruit')
      .orderBy('createTime','desc')
      .skip(i * MAX_LIMIT)  //跳过已经查询过的数据
      .limit(MAX_LIMIT)  //每次查询多少数据
      .where({
        recruitState:event.recruitState
      })
      .get()
      .then(res=>{
        // console.log('第'+(i+1)+'页',res)
        tasks = tasks.concat(res.data)
      })
    }
    // console.log(tasks)
    return tasks
  }else if(parameter=='updateRecruitStateById') { //根据id修改招募状态
    return db.collection('recruit').where({
      _id: event.id
    })
    .update({
      data: {
        recruitState:event.recruitState
      },
    })
  }else if(parameter=='getRecruitNumByState') { //根据招募状态查询招募的数量
    return await db.collection('recruit').where({
      recruitState:event.recruitState
    }).count()  //计算有多少条数据
  }else{

  }
  
}

